package com.woniuxy.goods.controller;


import cn.hutool.core.bean.BeanUtil;
import com.woniuxy.core.annotation.Permission;
import com.woniuxy.core.util.Result;
import com.woniuxy.goods.dto.GoodsDto;
import com.woniuxy.goods.dto.GroupTypeDto;
import com.woniuxy.goods.entity.GroupType;
import com.woniuxy.goods.form.AddGroupTypeForm;
import com.woniuxy.goods.form.UpdateGroupTypeForm;
import com.woniuxy.goods.param.AddGroupTypeParam;
import com.woniuxy.goods.param.UpdateGroupTypeParam;
import com.woniuxy.goods.service.GroupTypeService;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 * 类别、属性组绑定控制层接口
 * @author ...
 * @since 2024年05月22日
 */
@RestController
@Api(tags = "类别、属性组绑定管理接口")
@RequestMapping("/groupType")
public class GroupTypeController {
    /**
     * 类别、属性组绑定服务层接口
     */
    @Resource
    private GroupTypeService groupTypeService;

    /**
     * 新增属性组、类别绑定
     * @param form 新增类别属性组绑定对象
     * @return 类别属性组绑定dto对象集合
     * @throws Exception
     */
    @ApiOperation("新增属性组、类别绑定")
    @ApiResponses({
            @ApiResponse(code = 200,message = "OK",response = GroupTypeDto.class)
    })
    @PostMapping("/addGroupType")
    @Permission(roles = {"超级管理员","管理员"})
    public Result addGroupType(@RequestBody AddGroupTypeForm form)throws Exception{
        List<GroupTypeDto> dtos = groupTypeService.addGroupType(BeanUtil.toBean(form, AddGroupTypeParam.class));
        return Result.success("新增属性组、类别绑定成功",dtos);
    }

    /**
     * 通过id删除属性组、类别绑定
     * @param id 类别、属性组绑定信息id
     * @return
     * @throws Exception
     */
    @ApiOperation("通过id删除属性组、类别绑定")
    @ApiImplicitParam("类别、属性组绑定信息id")
    @GetMapping("/delGroupTypeById")
    @Permission(roles = {"超级管理员","管理员"})
    public Result delGroupTypeById(Integer id)throws Exception{
        groupTypeService.delGroupTypeById(id);
        return Result.success("通过id删除属性组、类别绑定成功",null);
    }

    /**
     * 通过属性组id删除属性组、类别绑定
     * @param groupId 属性组id
     * @return
     * @throws Exception
     */
    @ApiOperation("通过属性组id删除属性组、类别绑定")
    @ApiImplicitParam("属性组id")
    @GetMapping("/delGroupTypeByGroupId")
    @Permission(roles = {"超级管理员","管理员"})
    public Result delGroupTypeByGroupId(Integer groupId)throws Exception{
        groupTypeService.delGroupTypeByGroupId(groupId);
        return Result.success("通过属性组id删除属性组、类别绑定成功",null);
    }

    /**
     * 通过类别id删除属性组、类别绑定
     * @param catId 类别id
     * @return
     * @throws Exception
     */
    @ApiOperation("通过类别id删除属性组、类别绑定")
    @ApiImplicitParam("类别id")
    @GetMapping("/delGroupTypeByCatId")
    @Permission(roles = {"超级管理员","管理员"})
    public Result delGroupTypeByCatId(Integer catId)throws Exception{
        groupTypeService.delGroupTypeByCatId(catId);
        return Result.success("通过类别id删除属性组、类别绑定成功",null);
    }

    /**
     * 通过id修改属性组、类别绑定
     * @param form 修改类别属性组绑定对象
     * @return 类别属性组绑定dto对象
     * @throws Exception
     */
    @ApiOperation("通过id修改属性组、类别绑定")
    @ApiResponses({
            @ApiResponse(code = 200,message = "OK",response = GroupTypeDto.class)
    })
    @PostMapping("/updateGroupTypeById")
    @Permission(roles = {"超级管理员","管理员"})
    public Result updateGroupTypeById(@RequestBody UpdateGroupTypeForm form)throws Exception{
        GroupTypeDto dto = groupTypeService.updateGroupTypeById(BeanUtil.toBean(form, UpdateGroupTypeParam.class));
        return Result.success("通过id修改属性组、类别绑定成功",dto);
    }

    /**
     * 通过类别id修改属性组、类别绑定
     * @param form 新增类别属性组绑定对象
     * @return 类别属性组绑定dto对象集合
     * @throws Exception
     */
    @ApiOperation("通过类别id修改属性组、类别绑定")
    @ApiResponses({
            @ApiResponse(code = 200,message = "OK",response = GroupTypeDto.class)
    })
    @PostMapping("/updateGroupTypeByCatId")
    @Permission(roles = {"超级管理员","管理员"})
    public Result updateGroupTypeByCatId(@RequestBody AddGroupTypeForm form)throws Exception{
        List<GroupTypeDto> dtos = groupTypeService.updateGroupTypeByCatId(BeanUtil.toBean(form, AddGroupTypeParam.class));
        return Result.success("通过类别id修改属性组、类别绑定成功",dtos);
    }

    /**
     * 通过id查看属性组、类别绑定
     * @param id 类别属性组绑定信息id
     * @return 类别属性组绑定dto对象
     * @throws Exception
     */
    @ApiOperation("通过id查看属性组、类别绑定")
    @ApiImplicitParam("类别属性组绑定信息id")
    @ApiResponses({
            @ApiResponse(code = 200,message = "OK",response = GroupTypeDto.class)
    })
    @GetMapping("/findGroupTypeById")
    public Result findGroupTypeById(Integer id)throws Exception{
        GroupTypeDto dto = groupTypeService.findGroupTypeById(id);
        return Result.success("通过id查看属性组、类别绑定成功",dto);
    }

    /**
     * 通过属性组id、类别id查看属性组、类别绑定
     * @param subCatId 类别id
     * @param groupId  属性组id
     * @return 类别属性组绑定dto对象
     * @throws Exception
     */
    @ApiOperation("通过属性组id、类别id查看属性组、类别绑定")
    @ApiImplicitParam("类别属性组绑定信息id")
    @ApiResponses({
            @ApiResponse(code = 200,message = "OK",response = GroupTypeDto.class)
    })
    @GetMapping("/findGroupTypeByCatGroup")
    public Result findGroupTypeByCatGroup(Integer subCatId,Integer groupId)throws Exception{
        GroupTypeDto dto = groupTypeService.findGroupTypeByCatGroup(subCatId,groupId);
        return Result.success("通过属性组id、类别id查看属性组、类别绑定成功",dto);
    }

    /**
     * 通过类别id查看属性组、类别绑定
     * @param catId 类别id
     * @return 类别属性组绑定dto对象集合
     * @throws Exception
     */
    @ApiOperation("通过类别id查看属性组、类别绑定")
    @ApiImplicitParam("类别id")
    @ApiResponses({
            @ApiResponse(code = 200,message = "OK",response = GroupTypeDto.class)
    })
    @GetMapping("/findGroupTypeByCatId")
    public Result findGroupTypeByCatId(Integer catId)throws Exception{
        List<GroupTypeDto> dtos = groupTypeService.findGroupTypeByCatId(catId);
        return Result.success("通过类别id查看属性组、类别绑定成功",dtos);
    }

    /**
     * 通过属性组id查看属性组、类别绑定
     * @param groupId 属性组id
     * @return 类别属性组绑定dto对象集合
     * @throws Exception
     */
    @ApiOperation("通过属性组id查看属性组、类别绑定")
    @ApiImplicitParam("属性组id")
    @ApiResponses({
            @ApiResponse(code = 200,message = "OK",response = GroupTypeDto.class)
    })
    @GetMapping("/findGroupTypeByGroupId")
    public Result findGroupTypeByGroupId(Integer groupId)throws Exception{
        List<GroupTypeDto> dtos = groupTypeService.findGroupTypeByGroupId(groupId);
        return Result.success("通过属性组id查看属性组、类别绑定成功",dtos);
    }

}

